<?php
/** 
 * Servicio de autentificacion.
 * @author gemu
 * 
 */
class AuthService
{
	/**
	 * Realiza el login al sistema y inicia la sesion.
	 * @param Usuario $usuario
	 * @return Usuario
	 */
	public function abrirSesion($usuario) {
		Validator::validarNoVacio($usuario, 'usuario');
		Validator::validarNoVacio($usuario->alias, 'alias');
		$errorMsg = null;
		
		$retUsuario = new Usuario();
		try {
			$query = "SELECT * FROM usuario WHERE alias='".mysql_escape_string($usuario->alias)
				."' AND contrasena='".md5($usuario->contrasena)."'";
			
			$result = Database::consulta($query);
			if(Database::numeroFilas($result) == 1) {
				$row = Database::obtenerFila($result);
				if (!$row['habilitado']) {
					throw new ServiceException('error.usuario_desactivado');
				}
				
				$retUsuario->id = $row['id'];
				$retUsuario->rut = $row['rut'];
				$retUsuario->nombre = $row['nombre'];
				$retUsuario->apaterno = $row['apaterno'];
				$retUsuario->amaterno = $row['amaterno'];
				$retUsuario->rol = $row['rol_nombre'];
				$retUsuario->habilitado = $row['habilitado'];
				$retUsuario->alias = $row['alias'];
				
				// carga la sesion
				Zend_Session::start();
				$myLogin = new Zend_Session_Namespace('Auth');
				$myLogin->user = $retUsuario;
			} else {
				$errorMsg = 'error.usuario_invalido';
			}
		} catch (Exception $e) {
			Logger::log($e->getMessage());
			throw new FatalException(Constantes::ERROR_FATAL, $e->getMessage());
		}
		
		if($errorMsg != null) {
			throw new ServiceException($errorMsg);	
		}
		
		return $retUsuario;
	}


	/**
	 * Cierra una sesion.
	 */
	public function cerrarSesion() {
		@Zend_Session::destroy(true);
	}
}
?>